#include "copyright.h"
#include "main.h"
int mess;
MailBox::MailBox()
{
    send = new Semaphore("mailbox_send",0);
    receive = new Semaphore("mailbox_receive",0);
    mess = -1;

}

MailBox::~MailBox()
{
    delete send;
    delete receive;
}
MailBox::Send(int message)
{
  //incerc sa trimit mesajul, daca sunt threaduri care au apelat deja receive
  //atunci aceastea vor fi "trezite"
    
    send.V();
    mess = message;

  //daca nu sunt inca threaduri care au apelat receive atunci asteapta pana cand
  //apare unul
  
    receive.P();
  
  //dupa transmiterea mesajului -> exit

    printf("Message sent: value %d",message);
    

}

MailBox::Receive(int *message)
{
    //incerc sa primesc mesajul, anunt eventualele threaduri care au apelat send
    //ca exista un thread care a apelat receive
        
        receive.V();
    //daca exista un mesaj deja trimit atunci il preiau si merg mai departe 
        send.P();
        message = mess;
        printf("Message received, value %d",message);
        

}


